package com.gobang.common.exception;

/**
 * 匹配系统异常类
 * 用于匹配系统模块的业务异常处理
 * 
 * @author gobang-team
 * @since 1.0.0
 */
public class MatchException extends BaseException {

    /**
     * 使用ErrorCode构造匹配异常
     *
     * @param errorCode 错误码枚举
     */
    public MatchException(ErrorCode errorCode) {
        super(errorCode);
    }

    /**
     * 使用ErrorCode和自定义消息构造匹配异常
     *
     * @param errorCode 错误码枚举
     * @param customMessage 自定义错误消息
     */
    public MatchException(ErrorCode errorCode, String customMessage) {
        super(errorCode, customMessage);
    }

    /**
     * 使用ErrorCode和原因异常构造匹配异常
     *
     * @param errorCode 错误码枚举
     * @param cause 原因异常
     */
    public MatchException(ErrorCode errorCode, Throwable cause) {
        super(errorCode, cause);
    }

    // 静态工厂方法，方便快速创建常见的匹配异常

    /**
     * 加入匹配队列失败
     */
    public static MatchException joinQueueFailed() {
        return new MatchException(ErrorCode.MATCH_QUEUE_JOIN_FAILED);
    }

    /**
     * 退出匹配队列失败
     */
    public static MatchException leaveQueueFailed() {
        return new MatchException(ErrorCode.MATCH_QUEUE_LEAVE_FAILED);
    }

    /**
     * 已在匹配队列中
     */
    public static MatchException alreadyInQueue() {
        return new MatchException(ErrorCode.MATCH_ALREADY_IN_QUEUE);
    }

    /**
     * 未在匹配队列中
     */
    public static MatchException notInQueue() {
        return new MatchException(ErrorCode.MATCH_NOT_IN_QUEUE);
    }

    /**
     * 未找到合适的对手
     */
    public static MatchException opponentNotFound() {
        return new MatchException(ErrorCode.MATCH_OPPONENT_NOT_FOUND);
    }

    /**
     * 匹配超时
     */
    public static MatchException matchTimeout() {
        return new MatchException(ErrorCode.MATCH_TIMEOUT);
    }

    /**
     * 匹配已取消
     */
    public static MatchException matchCancelled() {
        return new MatchException(ErrorCode.MATCH_CANCELLED);
    }

    /**
     * 匹配算法错误
     */
    public static MatchException algorithmError() {
        return new MatchException(ErrorCode.MATCH_ALGORITHM_ERROR);
    }

    /**
     * 创建游戏房间失败
     */
    public static MatchException roomCreateFailed() {
        return new MatchException(ErrorCode.MATCH_ROOM_CREATE_FAILED);
    }

    /**
     * 用户状态不允许匹配
     */
    public static MatchException userStatusError() {
        return new MatchException(ErrorCode.MATCH_USER_STATUS_ERROR);
    }

    /**
     * 匹配请求失败
     */
    public static MatchException requestFailed() {
        return new MatchException(ErrorCode.MATCH_REQUEST_FAILED);
    }

    /**
     * 取消匹配失败
     */
    public static MatchException cancelFailed() {
        return new MatchException(ErrorCode.MATCH_CANCEL_FAILED);
    }
} 